package com.qf.test;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import com.qf.pojo.Persion;
import com.qf.util.EsUtil;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.common.xcontent.json.JsonXContent;
import org.elasticsearch.index.reindex.UpdateByQueryRequest;
import org.junit.Test;

import java.util.Date;

public class testDocManager {
    //创建和ES服务器连接对象
    //private RestHighLevelClient client = EsUtil.getClient();
    private RestHighLevelClient client = EsUtil.getClient();
    //索引名字
    //private static final String index = "persion";
    private static final String index = "persion";
//-------------------添加文档，存入数据---------

    @Test
    public void testDocadd() throws Exception{
        //1. 准备一个person数据(创建一个实体类对象)
        Persion persion = new Persion("1","袁天罡",24,new Date());
        //2. 将person实体转换成json格式
        String jsonString = JSON.toJSONString(persion);
        //3. 准备一个request对象, 指定索引名字（手动指定id）
        IndexRequest request = new IndexRequest(index);
        //4. 手动指定id, 将json数据存入请求对象中, XContentType.JSON为存入数据类型
        request.id(persion.getId()).source(jsonString, XContentType.JSON);
        //5. 通过client对象执行添加
        IndexResponse response = client.index(request, RequestOptions.DEFAULT);
        //6. 输出返回结果
        System.out.println(response.getResult().toString());
    }
//二次练习文档添加
    @Test
    public void testDocCreate() throws Exception{
        //1.准备一个persion数据（创建一个实体类对象）
        Persion persion = new Persion("1", "一幅图", 45, new Date());

        //2.将person转换成Json格式
        String jsonString = JSON.toJSONString(persion);
        //3.准备一个request对象，指定索引的名字（手动指定id）
        IndexRequest request = new IndexRequest(index);
        //4.手动指定id，将json数据存入请求对象中，XContentType.JSON为存入数据类型
        request.id(persion.getId()).source(jsonString,XContentType.JSON);
        //5.通过client对象执行添加
        IndexResponse response = client.index(request, RequestOptions.DEFAULT);

        //6.输出返回结果
        System.out.println(response.getResult().toString());

    }

    @Test
    public void testDocUpdate() throws Exception{
        //1. 准备一个person数据(创建一个实体类对象)
        Persion persion = new Persion("1","袁崇焕",25,new Date());
        //2. 将person实体转换成json格式
        String jsonString = JSON.toJSONString(persion);

        //3. 准备一个request对象, 指定索引名字（手动指定id）
        UpdateRequest request = new UpdateRequest(index, persion.getId());


//        //4. 设置将数据修改成什么内容
        request.doc(jsonString,XContentType.JSON);
//        //5. //5. 执行请求, 返回响应
        UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
//
//        //6. 输出返回结果
        System.out.println(response.getResult().toString());
    }


    //--------------删除--------------


    @Test
    public void testDeletedDoc() throws Exception{
        //1. 封装用于删除的请求对象, 第一参数:索引名字, 第二参数:文档id
        DeleteRequest request = new DeleteRequest();


        //2. client执行
        DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);


        //3. 输出结果
        System.out.println(response.getResult());

    }
}
